﻿using System;
using System.Net.Mail;
using System.Net;

namespace BAL
{
   public class Email
   {
       /// <summary>
       /// Thực hiện gửi mail
       /// </summary>
       /// <param name="sendFrom">Đia chỉ mail cần gửi</param>
       /// <param name="sendTo">Tên công cơ quan, người gửi</param>mail
       /// <param name="subject">Nội dung sơ lược</param>
       /// <param name="body">Nội dung gửi mail</param>
       /// <param name="mail">Địa chỉ mail gửi</param>
       /// <param name="pass">Địa chỉ Pass gửi</param>
       /// <returns>Trả về chuỗi thông báo</returns>
       public string SendEmail(string sendFrom,string sendTo, string subject, string body,string mail,string pass)
       {
           //sử dụng smtp của posnet
           var client = new SmtpClient("mail.posnet.vn", 32000);

           client.EnableSsl = true;
           //Tiêu đề gửi mail
           var from = new MailAddress(sendFrom, "Thiết kế website - Phần mềm quản lý");

           var to = new MailAddress(sendTo, "Thiết kế website - Phần mềm quản lý");
           //Khởi tạo đối tượng mail
           var message = new MailMessage(from, to);
           //Cho phép dạng mail là định dạng HTML
           message.IsBodyHtml = true;
           //Truyền nội dung thư muốn gửi
           message.Body = body;
           
           message.Subject = subject;

           var myCreds = new NetworkCredential(mail, pass, "");
           
           client.Credentials = myCreds;

           try
           {

               client.Send(message);
               return "Email đã được gửi đến: " + sendTo + ".";
           }
           catch (Exception e)
           {
               return e.Message;
           }
         
       } 
       /// <summary>
       /// Thực hiện gửi mail có file đính kèm
       /// </summary>
       /// <param name="sendTo">Địa chỉ mail gửi đến</param>
       /// <param name="sendFrom">Tên người, cơ quan gửi mail</param>
       /// <param name="subject">Nội dung sơ lược của mail</param>
       /// <param name="body">Nội dung đầy đủ của mail</param>
       /// <param name="attachmentPath">Đường dẫn file đính kèm</param>
       /// <param name="mail">Địa chỉ mail gửi</param>
       /// <param name="pass">Mật khẩu đăng nhập mail</param>
       /// <returns></returns>
       public string SendEmailWithAttachment(string sendTo, string sendFrom, string subject, string body, string attachmentPath,string mail,string pass)
       {
           //sử dụng smtp của mail
           var client = new SmtpClient("smtp.mail.com", 587);

           client.EnableSsl = true;
           //Tiêu đề gửi mail
           var from = new MailAddress(sendFrom, "Thiết kế website - Phần mềm quản lý");

           var to = new MailAddress(sendTo, "Thiết kế website - Phần mềm quản lý");
           //Khởi tạo đối tượng mail
           var message = new MailMessage(from, to);
           //Cho phép dạng mail là định dạng HTML
           message.IsBodyHtml = true;
           //Truyền nội dung thư muốn gửi
           message.Body = body;
           //Thực hiện việc attach file đính kèm gửi theo mail
           var attach = new Attachment(attachmentPath);
           message.Attachments.Add(attach);

           message.Subject = subject;

           var myCreds = new NetworkCredential(mail, pass, "");

           client.Credentials = myCreds;

           try
           {

               //thực hiện việc gửi mail
               client.Send(message);
               return "Email đã được gửi đến: " + sendTo + ".";
           }
           catch (Exception e)
           {
               return e.Message;
           }
           
       }
       public string SendEmailWithBccAttachment(string sendTo, string sendBcc, string sendFrom, string Subject, string Body, string AttachmentPath)
       { 
           try
           {
               var regex = new System.Text.RegularExpressions.Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); 
               var from = sendFrom;
               var to = sendTo; //Danh sách email được ngăn cách nhau bởi dấu “;”
               var subject = Subject;
               var body = Body;
               var bcc = sendBcc; 
               var result = true;
               var allEmails = to.Split(';');
               foreach (var emailaddress in allEmails)
               {
                   result = regex.IsMatch(emailaddress);
                   if (result == false)
                   {
                       return "Địa chỉ email không hợp lệ.";
                   }
              }
               if (result == true)
               {
                   try
                   {
                       var em = new MailMessage(from, to, subject, body);
                       var attach = new  Attachment(AttachmentPath);
                       em.Attachments.Add(attach);
                       em.Bcc.Add(bcc);

                       var smtp = new SmtpClient();
                       smtp.Host = "smtp.mail.com";//Ví dụ xử dụng SMTP của mail
                       smtp.Send(em);

                       return "";
                   }
                   catch (Exception ex)
                   {
                       return ex.Message;
                   }
               }
               else
               {
                   return "";
               }
           }
           catch (Exception ex)
           {
               return ex.Message;
           }
       }
   }
} 

